@JsonFilter Jackson-এর একটি শক্তিশালী অ্যানোটেশন, যা JSON Serialization এবং Deserialization এর সময় ডেটা ফিল্টার করতে ব্যবহৃত হয়। এটি আপনাকে নির্দিষ্ট ডেটা প্রক্রিয়া করার সময় ডাইনামিকভাবে ফিল্টার প্রয়োগ করতে সাহায্য করে, যা বিশেষ করে নির্দিষ্ট কন্ডিশন বা সিকিউরিটি ও পেরফরম্যান্স চাহিদা পূরণের জন্য উপকারী হতে পারে।
Jackson-এ @JsonFilter অ্যানোটেশন ব্যবহার করে আপনি dynamic filtering করতে পারেন, যেখানে আপনি Java অবজেক্টের নির্দিষ্ট প্রোপার্টি বা ফিল্ডগুলোকে ফিল্টার করে JSON রূপান্তর করতে পারেন।
@JsonFilter এর সুবিধা
- Dynamic Filtering: Serialization-এর সময় কোন ফিল্ডগুলিকে JSON-এ অন্তর্ভুক্ত করা হবে তা নিয়ন্ত্রণ করা যায়।
- Runtime Filtering: ফিল্টারিং প্রক্রিয়া রানটাইমে নির্ধারণ করা যায়, অর্থাৎ যেকোনো সময় আপনাকে ফিল্টার অ্যাপ্লাই করার ক্ষমতা দেয়।
- Selective Serialization: শুধুমাত্র প্রয়োজনীয় ফিল্ডগুলো JSON-এ অন্তর্ভুক্ত করা হয়।
@JsonFilter ব্যবহারের প্রক্রিয়া
@JsonFilter ব্যবহারের জন্য নিচের ধাপগুলো অনুসরণ করা হয়:
- Filter-ID নির্ধারণ করা:
@JsonFilterঅ্যাট্রিবিউট দিয়ে ফিল্টারের নাম নির্ধারণ করা হয়। - ObjectMapper এ Filter প্রয়োগ করা:
ObjectMapper-এ filter-এ যা-চাহিদা সেটিং যুক্ত করা হয়।
প্র্যাকটিক্যাল উদাহরণ
Step 1: @JsonFilter অ্যাট্রিবিউট ব্যবহার করে ক্লাসে ফিল্টার তৈরি
import com.fasterxml.jackson.annotation.JsonFilter;
@JsonFilter("dynamicFilter")
public class Employee {
private String name;
private String department;
private int age;
private double salary;
// Constructors
public Employee(String name, String department, int age, double salary) {
this.name = name;
this.department = department;
this.age = age;
this.salary = salary;
}
// Getters and Setters
public String getName() {
return name;
}
public String getDepartment() {
return department;
}
public int getAge() {
return age;
}
public double getSalary() {
return salary;
}
}
এখানে, @JsonFilter("dynamicFilter") ফিল্টারের জন্য একটি নাম (dynamicFilter) নির্ধারণ করা হয়েছে। এর মানে, যখন আমরা ObjectMapper দিয়ে JSON সিরিয়ালাইজ করব, তখন dynamicFilter ফিল্টারটি অ্যাপ্লাই হবে।
Step 2: ObjectMapper এ Filter যুক্ত করা এবং Filter-এ নির্বাচন করা ফিল্ড
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.fasterxml.jackson.databind.ser.BeanPropertyFilter;
public class JsonFilterExample {
public static void main(String[] args) throws Exception {
// Employee object তৈরি
Employee employee = new Employee("Rahim", "Finance", 30, 50000.00);
// ObjectMapper তৈরি
ObjectMapper mapper = new ObjectMapper();
// Filter Provider তৈরি
SimpleFilterProvider filters = new SimpleFilterProvider();
// Filter সেট করা
filters.addFilter("dynamicFilter",
BeanPropertyFilter.serializeAllExcept("salary", "age")); // salary এবং age বাদ দেওয়া হয়েছে
// Filter সহ JSON সিরিয়ালাইজ করা
String json = mapper.writer(filters).writeValueAsString(employee);
// JSON আউটপুট
System.out.println(json);
}
}
Step 3: Output
এখন, যখন JSON সিরিয়ালাইজ করা হবে, তখন salary এবং age ফিল্ডগুলি বাদ দেওয়া হবে, কারণ আমরা serializeAllExcept পদ্ধতি ব্যবহার করেছি।
JSON Output:
{
"name": "Rahim",
"department": "Finance"
}
এখানে শুধুমাত্র name এবং department ফিল্ডগুলো JSON আউটপুটে থাকবে, এবং salary ও age ফিল্ডগুলো বাদ দেওয়া হয়েছে।
@JsonFilter এর অন্যান্য ব্যবহার
serializeAllExcept:- নির্দিষ্ট কিছু ফিল্ড ছাড়া সব ফিল্ড সিরিয়ালাইজ করা হবে।
serializeOnly:- নির্দিষ্ট কিছু ফিল্ডকে শুধুমাত্র সিরিয়ালাইজ করা হবে।
- Custom Filters:
- আরও বেশি কাস্টম ফিল্টার তৈরি করতে
BeanPropertyFilterএবংSimpleFilterProviderব্যবহার করা হয়।
- আরও বেশি কাস্টম ফিল্টার তৈরি করতে
Custom Filter উদাহরণ:
import com.fasterxml.jackson.databind.ser.BeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.fasterxml.jackson.databind.ObjectMapper;
public class CustomFilterExample {
public static void main(String[] args) throws Exception {
// Employee object তৈরি
Employee employee = new Employee("Sara", "HR", 28, 60000.00);
// ObjectMapper তৈরি
ObjectMapper mapper = new ObjectMapper();
// Custom Filter: শুধু নাম এবং বিভাগ সিরিয়ালাইজ হবে
SimpleFilterProvider filters = new SimpleFilterProvider();
filters.addFilter("dynamicFilter",
BeanPropertyFilter.filterOutAllExcept("name", "department"));
// Filter সহ JSON সিরিয়ালাইজ করা
String json = mapper.writer(filters).writeValueAsString(employee);
// JSON আউটপুট
System.out.println(json);
}
}
Output:
{
"name": "Sara",
"department": "HR"
}
এখানে, কাস্টম ফিল্টার ব্যবহার করে name এবং department ফিল্ডগুলো ছাড়া অন্য কোন ফিল্ড JSON আউটপুটে থাকবে না।
@JsonFilter এর সুবিধা
- Dynamic Filtering:
- Serialization-এর সময় dynamicভাবে কোন ফিল্ড বা প্রোপার্টি JSON-এ অন্তর্ভুক্ত হবে বা বাদ যাবে তা নির্ধারণ করা যায়।
- Performance Optimization:
- যখন বড় ডেটা স্ট্রাকচার থাকে, তখন শুধুমাত্র প্রয়োজনীয় ডেটা JSON-এ অন্তর্ভুক্ত করে পারফরম্যান্স উন্নত করা যায়।
- Security:
- সিকিউরিটি উদ্দেশ্যে বা সংবেদনশীল তথ্য গোপন রাখার জন্য নির্দিষ্ট প্রোপার্টি বাদ দেয়া যায়।
- Flexible Serialization:
- Runtime-এ আপনি নির্দিষ্ট ডেটা ফিল্টার করতে পারেন, যা JSON-এর আউটপুট কাস্টমাইজেশন এবং ব্যবহারের জন্য খুবই উপকারী।
@JsonFilter Jackson এর একটি শক্তিশালী টুল যা JSON Serialization এবং Deserialization-এর সময় dynamic filtering করতে সাহায্য করে। এটি ডেটা সিকিউরিটি, পারফরম্যান্স অপটিমাইজেশন এবং ফ্লেক্সিবল JSON আউটপুট তৈরিতে খুবই কার্যকর। এটি ব্যবহার করার মাধ্যমে আপনি Java ক্লাসের কিছু প্রোপার্টি বা ফিল্ড JSON আউটপুট থেকে বাদ দিতে বা নির্বাচন করতে পারেন, যা অনেক ক্ষেত্রেই প্রয়োজনীয় হতে পারে।
Read more